package com.ruoyi.yljf.service.impl;

import com.ruoyi.common.api.SystemApi;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.core.redis.RedisPrefix;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.common.web.config.SmsConfig;
import com.ruoyi.yljf.service.MSGService;
import com.ruoyi.common.utils.RandomUtil;
import com.sun.xml.bind.v2.TODO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;

/**
 * @AUTHOR XiaoYang
 * @DATE 2025/1/10
 * @DESCRIPTION 来自 https://blog.csdn.net/weixin_46146197/article/details/123280612
 */
@Service
public class MSGServiceImpl implements MSGService {

    @Autowired
    private RedisCache redisCache;
    @Autowired
    private SmsConfig smsConfig;

    @Override
    public void send( String phone) {

        // 从redis获取验证码，如果获取到直接返回
        String code = redisCache.getCacheObject(RedisPrefix.CAPTCHA.key() + phone);
        if (!StringUtils.isEmpty(code)) {   //判斷是否重复发送
            long expire = redisCache.getKeyExpire(code, TimeUnit.SECONDS);
            if (expire >= 4*60) {
                throw new ServiceException("验证码发送频繁,请稍后再试");
            }
        }
        //  如果redis获取不到，进行阿里云发送
        //生成随机数
//        TODO 目前验证码固定为1234
//        code = RandomUtil.getFourBitRandom();
        code = "1234";
        Map<String,String> map = new HashMap<>();
        //配置短信模板
        map.put("code", code);
        map.put("ACCESS_KEY_ID", smsConfig.getAccessKeyId());
        map.put("ACCESS_KEY_SECRET", smsConfig.getAccessKeySecret());
        map.put("SIGN_NAME", smsConfig.getSignName());
        map.put("TEMPLATE_CODE", smsConfig.getTemplateCode());
        //发送阿里云短信
         boolean b =SpringUtils.getBean(SystemApi.class).sendAliSMS(map, phone);
//        if (b) {
            //如果发送成功，就把验证码存到redis里，设置5分钟有效时间
            redisCache.setCacheObject(RedisPrefix.CAPTCHA.key() + phone, code, 5, TimeUnit.MINUTES);
            System.out.println("验证码发送成功");
            System.out.println("验证码为" + code);
//        } else {
//            System.out.println("验证码发送失败");
//        }
    }

    
    
    @Override
    public boolean checkCode(String phone, String captcha) {

        // TODO:任何手机号验证码默认为1234
        if("1234".equals(captcha)) {
            return true;
        }
        return false;

//        //从redis获取数据---验证码比对
//        String redisCaptcha = redisCache.getCacheObject(RedisPrefix.CAPTCHA.key() + phone);
//        if (StringUtils.isNotBlank(redisCaptcha)){
//            if (captcha.equalsIgnoreCase(redisCaptcha)){
//                //删除验证码
//                redisCache.deleteObject(redisCaptcha);
//                return true;
//            }
//        }
//
//        return false;
    }

}



